package br.edu.univas.jobmanager.controller;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.swing.ComboBoxModel;
import javax.swing.DefaultComboBoxModel;

import br.edu.univas.jobmanager.dao.CategoriaDAO;
import br.edu.univas.jobmanager.dao.EstadoDAO;
import br.edu.univas.jobmanager.dao.TarefaDAO;
import br.edu.univas.jobmanager.entity.Categoria;
import br.edu.univas.jobmanager.entity.Estado;
import br.edu.univas.jobmanager.entity.Tarefa;
import br.edu.univas.jobmanager.listener.FiltroRelatorioListener;
import br.edu.univas.jobmanager.view.FrameAdicionarTarefa;
import br.edu.univas.jobmanager.view.HistoricoDeTarefasTableModel;

public class ControllerRelatorioTarefas {

	private HistoricoDeTarefasTableModel _tableModel;
	private TarefaDAO _daoTarefa;
	private CategoriaDAO _daoCategoria;
	private EstadoDAO _daoEstado;

	private DefaultComboBoxModel _comboCategoria;
	private DefaultComboBoxModel _comboEstado;
	private ControllerPrincipal _controllerPrincipal;
	public ControllerRelatorioTarefas(ControllerPrincipal controllerPrincipal) {
		_daoTarefa = new TarefaDAO();
		_daoCategoria = new CategoriaDAO();
		_daoEstado = new EstadoDAO();
		_controllerPrincipal = controllerPrincipal;
	}

	public HistoricoDeTarefasTableModel getTableModel() {
		if (_tableModel == null) {
			_tableModel = new HistoricoDeTarefasTableModel(_daoTarefa.findAll());
		}
		return _tableModel;
	}

	public ComboBoxModel getModelComboStatus() {
		if(_comboEstado == null){
			_comboEstado = new DefaultComboBoxModel();
			ArrayList<Estado> estados = _daoEstado.findAll();
			for (Estado estado : estados) {
				_comboEstado.addElement(estado);
			}
		}
		return _comboEstado;
	}

	public ComboBoxModel getCategoriaComboModel() {
		if (_comboCategoria == null) {
			_comboCategoria = new DefaultComboBoxModel();
			List<Categoria> categorias = _daoCategoria.findAll();
			for (Categoria categoria : categorias) {
				_comboCategoria.addElement(categoria);
			}
		}
		return _comboCategoria;
	}
	
	
	public FiltroRelatorioListener getFiltrosListener(){
		return new FiltroRelatorioListener() {
			
			@Override
			public void filtrarPorPeriodoAction(Date dataInicial, Date dataFinal) {
				getTableModel().filtrarPorPeriodo(dataInicial, dataFinal);
				
			}
			
			@Override
			public void filtrarPorNomeAction(String nome) {
				getTableModel().filtraPorNome(nome);
				
			}
			
			@Override
			public void filtrarPorEstadoAction(Estado estado) {
				getTableModel().filtrarPorEstado(estado);
				
			}
			
			@Override
			public void filtrarPorCategoriaAction(Categoria categoria) {
				getTableModel().filtrarPorCategoria(categoria);
				
				
			}

			@Override
			public void atualizar() {
				getTableModel().atualizarTabela(_daoTarefa.findAll());
				
			}

			@Override
			public void deletarAction(Tarefa tarefa) {
				_daoTarefa.delete(tarefa);
				getTableModel().atualizarTabela(_daoTarefa.findAll());
				
			}

			@Override
			public void editarAction(Tarefa tarefa) {
				new FrameAdicionarTarefa(tarefa,_controllerPrincipal).setVisible(true);
				
			}

			/*@Override
			public void atualizarAction(Tarefa tarefa) {
				new FrameAdicionarTarefa(tarefa);
			}*/
		};
	}
}
